home *** CD-ROM | disk | FTP | other *** search
- # Dieses Makropaket demonstriert die Verwaltung einer einfachen
- # Telefondatei. Die Datei wird zur Bearbeitung stets in eine globale
- # Listenvariable namens 'liste' eingelesen. Diese Variable enthält
- # immer abwechselnd einen Namen und eine Telefonnummer, dargestellt
- # durch Zeichenketten.
-
- global liste; # Die Listenvariable
-
- # Der Makro 'datei_festlegen' fordert den Anwender auf, die Telefondatei
- # auszuwählen. Anschließend wird der Dateiname im SCEleton-Environment
- # gespeichert, damit er über die Lebensdauer der Makrosequenz hinaus
- # erhalten bleibt.
-
- datei_festlegen()
- begin
- set name to fileselect('C:\DIVERSE\*.*', '', 'Telefonliste auswählen');
- if ( name != '' ) # Hat der Anwender 'Abbruch' gewählt?
- begin
- setenv('PHONELIST', name); # Name speichern
- lprint('Gewählt ist ''%s''', name);
- return 1; # Erfolg an Aufrufer melden
- end
- else
- begin
- lprint('Keine Datei gewählt.');
- return 0; # Mißerfolg melden
- end
- end
-
- # Der Makro 'liste_sichern' schreibt den Inhalt von 'liste' in die Datei,
- # deren Name in der Environment-Variablen 'PHONELIST' steht. Das Dateiformat
- # besteht aus Zeilen, die jeweils einen Namen und die dazugehörige Nummer
- # enthalten, getrennt durch Kommata, und mit CR/LF abgeschlossen sind.
-
- liste_sichern()
- begin
- set name to getenv('PHONELIST');# Name aus dem Environment abrufen
- if ( name == '' ) # Noch kein Name gespeichert?
- begin
- if ( datei_festlegen() ) # Dann den Anwender auffordern
- set name to getenv('PHONELIST');
- else
- return 0;
- end
- set datei to Fcreate(name); # Datei anlegen bzw. löschen
- set i to 0;
- set max to @liste;
- while ( i < max ) # Liste durchlaufen
- begin
- set zeile to string("%s,%s\r\n",
- liste[i], liste[i + 1]); # eine Zeile formatieren
- Fwrite(datei, 0, zeile); # und in die Datei schreiben
- set i to i + 2;
- end
- Fclose(datei); # Datei schließen
- return 1;
- end
-
- # 'liste_lesen' liest den Inhalt der Telefondatei in die Variable 'liste'.
- # Eine gelesene Zeile wird mit 'split' in Name und Nummer zerlegt und an die
- # Liste angehängt.
-
- liste_lesen()
- begin
- set name to getenv('PHONELIST'); # Name abrufen, wie oben
- if ( name == '' )
- begin
- if ( datei_festlegen() )
- set name to getenv('PHONELIST');
- else
- return 0;
- end
- set liste to $$$;
- set datei to Fopen(name); # Datei öffnen
-
- do
- begin
- set zeile to Freadline(datei); # eine Zeile lesen
- if ( zeile[0] != '' )
- begin
- set eintrag to split(zeile[0], ',');
- # Eintrag zerlegen
- set liste to liste ++ eintrag;
- end
- end
- while ( zeile[1] != 1 ); # Bei Leerzeile Schleife beenden
- Fclose(datei); # Datei schließen
- return 1;
- end
-
- # 'eintrag_einfuegen' gestattet es dem Anwender, einen neuen Namen in die
- # Liste aufzunehmen. Dazu werden Namen und Nummer im Dialog abgefragt. Falls
- # der Name schon existiert, wird nur die Nummer gemäß der Eingabe geändert.
-
- eintrag_einfuegen()
- begin
- if ( liste_lesen() == 0 ) # Liste in den Speicher holen
- begin
- lprint('Liste nicht verfügbar.');
- return 0;
- end
- lprint("Neuer Name?"); # Name abfragen
- set name to inputline();
- lprint("Nummer?"); # Nummer abfragen
- set nummer to inputline();
- set pos to liste ? name;
- if ( pos >= 0 ) # Prüfen, ob Name schon existiert
- begin
- lprint("Name existiert schon.");
- set liste[pos + 1] to nummer; # Neue Nummer hinter Namen speichern
- end
- else
- begin
- set liste to liste ++ name; # Name und Nummer
- set liste to liste ++ nummer; # an die Liste anhängen
- end
- liste_sichern(); # Liste wieder zurückschreiben
- end
-
- # 'eintrag_loeschen' entfernt einen Namen nebst Nummer aus der Liste. Dazu
- # wird der Name im Dialog abgefragt.
-
- eintrag_loeschen()
- begin
- if ( liste_lesen() == 0 ) # Liste in den Speicher holen
- begin
- lprint('Liste nicht verfügbar.');
- return 0;
- end
- lprint("Welchen Namen löschen?"); # Name abfragen
- set name to inputline();
- set pos to liste ? name; # Position in der Liste bestimmen
- if ( pos < 0 )
- begin
- lprint("Name existiert nicht.");
- return 0;
- end
- delete liste[i:2]; # Name & Nummer löschen
- liste_sichern(); # Liste wieder zurückschreiben
- end
-
- # 'liste_anzeigen' 'druckt' den Inhalt der Liste in das 'SCEleton'-Fenster.
-
- liste_anzeigen()
- begin
- if ( liste_lesen() == 0 ) # Liste in den Speicher holen
- begin
- lprint('Liste nicht verfügbar.');
- return 0;
- end
- set len to @liste;
- set i to 0;
- while ( i < len ) # Zeile für Zeile ausgeben
- begin
- lprint('Nr: %3d, Name: %20s, Tel: %20s',
- i / 2 + 1, liste[i], liste[i + 1]);
- # Name und Nummer formatieren & durchnummerieren
- set i to i + 2;
- end
- end
-
-